<?php

namespace App;

use EasyWeChat\Factory;

/**
 * Class Wechat
 * @package App
 */
class Wechat
{
    /**
     * 微信回调
     */
    const NOTIFY_URL = "";


    /**
     * 支付配置
     * @return \EasyWeChat\Payment\Application
     */
    static function PayConfig()
    {
        $config = [
            // 必要配置
            'app_id' => env('WECHAT_MYOP_APPID'),
            'mch_id' => env('WECHAT_MYOP_MCH_ID'),
            'key' => env('WECHAT_MYOP_KEY'),   // API 密钥

            // 如需使用敏感接口（如退款、发送红包等）需要配置 API 证书路径(登录商户平台下载 API 证书)
            'cert_path' => public_path('/wechatMyop/apiclient_cert.pem'), // XXX: 绝对路径！！！！
            'key_path' => public_path('/wechatMyop/apiclient_key.pem'), // XXX: 绝对路径！！！！

            'notify_url' => self::NOTIFY_URL,     // 你也可以在下单时单独设置来想覆盖它
        ];
        return Factory::payment($config);
    }


    /**
     * 公众号配置
     * @return \EasyWeChat\OfficialAccount\Application
     */
    static function OfficialConfig()
    {
        $config = [
            'app_id' => env('WECHAT_PUBLIC_APPID'),
            'secret' => env('WECHAT_PUBLIC_SECRET'),

            // 指定 API 调用返回结果的类型：array(default)/collection/object/raw/自定义类名
            'response_type' => 'array',

            'log' => [
                'level' => 'debug',
                'file' => storage_path('wechat.log'),
            ],
        ];

        return Factory::officialAccount($config);
    }


    /**
     * 返现
     * @param $order
     * @param $price
     * @param $c_id
     * @return array
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     */
    static function ToBalance($order, $price, $c_id)
    {
        $user = User::select('name', 'wechat')->where('c_id', $c_id)->first();
        if (!$user || !$user->name || !$user->wechat) {
            return ['status' => 2, 'message' => '用户没有绑定微信'];
        }
        //返现
        $app = self::PayConfig();
        $result = $app->transfer->toBalance([
            'partner_trade_no' => $order, // 商户订单号，需保持唯一性(只能是字母或者数字，不能包含有符号)
            'openid' => $user->wechat,
            'check_name' => 'NO_CHECK', // NO_CHECK：不校验真实姓名, FORCE_CHECK：强校验真实姓名
            're_user_name' => $user->name, // 如果 check_name 设置为FORCE_CHECK，则必填用户真实姓名
            'amount' => $price, // 企业付款金额，单位为分
            'desc' => '康侣积分商城提现', // 企业付款操作说明信息。必填
        ]);
        //校验
        if ($result['return_code'] !== 'SUCCESS') {
            return ['status' => 2, 'message' => '出错了'];
        }
        if ($result['result_code'] !== 'SUCCESS') {
            return ['status' => 2, 'message' => $result['err_code_des']];
        }
        return ['status' => 1, 'message' => '成功'];
    }

}
